package com.zrrd.controller;

import com.zrrd.pojo.User;
import org.springframework.web.bind.annotation.*;

import java.util.Arrays;
import java.util.List;

/**
 * @author WanJl
 * @version 1.0
 * @title UserController
 * @description
 * @create 2024/1/29 12:03
 */
@RestController
@RequestMapping("/user")
public class UserController {

    /**
     *
     * 1、普通参数传递：
     * 用户登录，RestFull风格不太适用该功能
     * @RequestParam：设置请求参数的注解
     * 【@RequestParam】解决的前端发送过来的请求参数名和当前方法接收的形式参数名不一致的情况，如果一致，可以不用@RequestParam
     *  required = false：设置该请求参数为非必填项
     *  defaultValue = 默认值 ：设置该请求参数的默认值
     * @param uname
     * @param pwd
     * @return
     */
    @RequestMapping("/login")
    @ResponseBody
    public Integer login(@RequestParam(value = "username",required = false,defaultValue = "没有名子") String uname, @RequestParam(value = "password",required = false,defaultValue = "没有密码")String pwd){
        System.out.println(uname);
        System.out.println(pwd);
        return 1;
    }
    // http://localhost:8080/JMS2301_05_SSM_war/user?pageNum=
    //defaultValue = 1
    // @RequestParam(value = "pageNum",required = false,defaultValue = 1) Integer pageNum
    // 传入页码值，非必填项，如果不填，默认跳转到第1页
    /*
    @RequestMapping("/register")
    @ResponseBody
    public Integer register(String username,String password,String realName,Integer age){
        User user = new User(username, password, realName, age);
        System.out.println(user);
        return 1;
    }*/

    /**
     * 2、POJO类型参数传递
     * 针对于POJO类型的参数，可以直接将前端发送的多个参数进行封装匹配，封装到POJO类型的方法形参中
     * ?username=zhangsan&password=123456&realName=张三&age=20
     * User user
     * 注意：请求参数的key的名字必须要和POJO类型参数的属性名一致，否则无法封装。
     * @param user
     * @return
     */
    @RequestMapping("/register")
    @ResponseBody
    public Integer register(User user){
        System.out.println(user);
        return 1;
    }

    /**
     * 4、数组格式的参数传递
     * 数组参数：请求参数名与形参对象属性名相同且请求参数为多个，定义数组类型即可接收参数
     * http://localhost:8080/JMS2301_05_SSM_war/user/wodeaihao?hobby=唱&hobby=跳&hobby=rap&hobby=篮球
     *
     * @param hobby
     * @return
     */
    @RequestMapping("/wodeaihao")
    @ResponseBody
    public Integer addHobby(String[] hobby){
        System.out.println("我的爱好："+Arrays.toString(hobby));
        return 1;
    }

    /**
     * 5、集合格式的参数传递
     * 针对集合参数，同名请求参数可以使用@RequestParam注解，将多个同名参数值，映射到方法的同名形参(集合对象)中作为数据。
     * 集合保存普通参数：请求参数名与形参集合对象名相同且请求参数为多个，@RequestParam绑定参数关系
     *
     * http://localhost:8080/JMS2301_05_SSM_war/user/addList?hobby=唱&hobby=跳&hobby=rap&hobby=篮球
     *
     * @RequestParam List<String> hobby
     *
     * @param hobby
     * @return
     */
    @RequestMapping("/addList")
    @ResponseBody
    public Integer addHobby02(@RequestParam List<String> hobby){
        System.out.println("我的爱好："+hobby);
        return 1;
    }

}
